package com.example.designpatterns.singleton;

/**
 * 懒汉式单例模式（双重检查锁定）
 * 
 * 在第一次调用时才创建实例，线程安全且延迟加载
 */
public class LazySingleton {
    // 使用volatile关键字确保多线程环境下的可见性和有序性
    private static volatile LazySingleton instance;
    
    // 私有构造方法，防止外部实例化
    private LazySingleton() {
        System.out.println("懒汉式单例被初始化");
    }
    
    // 提供全局访问点（双重检查锁定）
    public static LazySingleton getInstance() {
        // 第一次检查，避免不必要的同步
        if (instance == null) {
            // 同步锁
            synchronized (LazySingleton.class) {
                // 第二次检查，避免多线程并发时创建多个实例
                if (instance == null) {
                    instance = new LazySingleton();
                }
            }
        }
        return instance;
    }
    
    // 业务方法
    public void doSomething() {
        System.out.println("懒汉式单例执行业务方法");
    }
} 